With improved connectivity and access of computers and other devices to various networks, it has become commonplace for different programs, or clients, to share access to the same information, such as data objects. Sharing of data objects enables the sharing of information in real-time across multiple, disparate clients, such as machines that are running multiple pieces of technology. With the sharing of data object comes the inevitable issue of access to the data objects, including who is allowed to modify the data and what modifications are allowed. In many systems, logic to enforce various rules is stored by each client, which leaves the system vulnerable to a rogue client bypassing checks and invalidating or tampering with the data. Further, the client itself could monitor its own shared data, but this is likely to prove to be prohibitively expensive for that client. Additionally, it may be challenging for a developer to accurately revert a disallowed modification once it has already been propagated to all clients that share access to that particular data object since the old values may no longer be saved in the system.